package es.nadalgoyo.frikiquest.bbdd.tablas;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import es.nadalgoyo.frikiquest.excel.RespuestasExcel;
import es.nadalgoyo.frikiquest.vo.RespuestasVO;
import es.sergionadal.mvc.bbdd.tablas.Tabla;
import es.sergionadal.mvc.vo.CampoVO;
import es.sergionadal.mvc.vo.ForeignKeyVO;

public class TablaRespuestas extends Tabla {

	private CampoVO campoIDPregunta;

	public static final String ID_PREGUNTA = "idPregunta";

	public static final String TEXTO = "texto";

	public static final String ISOK = "isok";

	private RespuestasExcel excel;

	public TablaRespuestas() {
		super("frikirespuestas");
		campoIDPregunta = new CampoVO(ID_PREGUNTA, CampoVO.INTEGER);

	}

	@Override
	protected List<CampoVO> getCamposChild() {
		List<CampoVO> campos = new ArrayList<CampoVO>();
		campos.add(getId());
		campos.add(new CampoVO(TEXTO, CampoVO.TEXT));
		campos.add(new CampoVO(ISOK, CampoVO.INTEGER));
		campos.add(campoIDPregunta);
		return campos;
	}

	@Override
	public ArrayList<ForeignKeyVO> getForeignKey(
			es.sergionadal.mvc.bbdd.tablas.ListTablas tablas) {
		ArrayList<ForeignKeyVO> fk = new ArrayList<ForeignKeyVO>();
		TablaPreguntas tablaPreguntas = (TablaPreguntas) tablas
				.getTabla(ListTablas.PREGUNTAS);
		fk.add(new ForeignKeyVO(tablaPreguntas, tablaPreguntas.getId(),
				campoIDPregunta));
		return fk;
	}

	@Override
	public long insert(SQLiteDatabase db) {
		ContentValues nuevoRegistro = new ContentValues();

		long result = -1;
		for (RespuestasVO res : excel.getRespuestas()) {
			nuevoRegistro.put(ID, res.getId());
			nuevoRegistro.put(ID_PREGUNTA, res.getIdPregunta());
			nuevoRegistro.put(TEXTO, res.getTexto());
			nuevoRegistro.put(ISOK, res.getIsOk());
			result = db.insertWithOnConflict(getName(), null, nuevoRegistro,
					SQLiteDatabase.CONFLICT_REPLACE);
			if (result == -1)
				return result;
		}
		return result;
	}

	@Override
	public void update(SQLiteDatabase db, String[] args) {
		ContentValues valores = new ContentValues();
		for (RespuestasVO res : excel.getRespuestas()) {
			valores.put(ID_PREGUNTA, res.getIdPregunta());
			valores.put(TEXTO, res.getTexto());
			valores.put(ISOK, res.getIsOk());
			db.update(getName(), valores, getParameterField(ID), args);
		}
	}

	public void setRespuestasExcel(RespuestasExcel excel) {
		this.excel = excel;
	}

	public List<RespuestasVO> getPreguntas(SQLiteDatabase db) {
		return getListRespuestas(getAll(db));
	}

	public RespuestasVO getRespuestas(SQLiteDatabase db, String id) {
		Cursor cursor = getRegistroPerID(db, id);
		RespuestasVO respuesta = null;
		if (cursor.moveToFirst() && !cursor.moveToNext()) {
			respuesta = new RespuestasVO(cursor.getString(1),
					cursor.getString(2), cursor.getString(3),
					cursor.getString(4));
		}

		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		return respuesta;
	}

	public List<RespuestasVO> getRespuestasPregunta(SQLiteDatabase db,
			String idPregunta) {
		Cursor cursor = db.query(getName(), getColumns(),
				getParameterField(ID_PREGUNTA), new String[] { idPregunta },
				null, null, ID);

		return getListRespuestas(cursor);
	}

	private List<RespuestasVO> getListRespuestas(Cursor cursor) {
		List<RespuestasVO> respuestas = new ArrayList<RespuestasVO>();

		if (cursor.moveToFirst()) {
			do {
				respuestas
						.add(new RespuestasVO(cursor.getString(0), cursor
								.getString(1), cursor.getString(2), cursor
								.getString(3)));
			} while (cursor.moveToNext());
		}

		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		return respuestas;
	}

}
